{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "'2.3.1'"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import keras\n",
    "keras.__version__"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Understanding recurrent neural networks\n",
    "\n",
    "This notebook contains the code samples found in Chapter 6, Section 2 of [Deep Learning with Python](https://www.manning.com/books/deep-learning-with-python?a_aid=keras&a_bid=76564dff). Note that the original text features far more content, in particular further explanations and figures: in this notebook, you will only find source code and related comments.\n",
    "\n",
    "---\n",
    "\n",
    "[...]\n",
    "\n",
    "## A first recurrent layer in Keras\n",
    "\n",
    "The process we just naively implemented in Numpy corresponds to an actual Keras layer: the `SimpleRNN` layer:\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "from keras.layers import SimpleRNN"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "There is just one minor difference: `SimpleRNN` processes batches of sequences, like all other Keras layers, not just a single sequence like \n",
    "in our Numpy example. This means that it takes inputs of shape `(batch_size, timesteps, input_features)`, rather than `(timesteps, \n",
    "input_features)`.\n",
    "\n",
    "Like all recurrent layers in Keras, `SimpleRNN` can be run in two different modes: it can return either the full sequences of successive \n",
    "outputs for each timestep (a 3D tensor of shape `(batch_size, timesteps, output_features)`), or it can return only the last output for each \n",
    "input sequence (a 2D tensor of shape `(batch_size, output_features)`). These two modes are controlled by the `return_sequences` constructor \n",
    "argument. Let's take a look at an example:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "---------------下面输出一些东西------------------\n",
      "units= 32\n",
      "activation= tanh\n",
      "use_bias= True\n",
      "kernel_initializer= glorot_uniform\n",
      "recurrent_initializer= orthogonal\n",
      "bias_initializer= zeros\n",
      "kernel_regularizer= None\n",
      "recurrent_regularizer= None\n",
      "bias_regularizer= None\n",
      "activity_regularizer= None\n",
      "kernel_constraint= None\n",
      "recurrent_constraint= None\n",
      "bias_constraint= None\n",
      "dropout= 0.0\n",
      "recurrent_dropout 0.0\n",
      "return_sequences= False\n",
      "return_state= False\n",
      "go_backwards= False\n",
      "stateful= False\n",
      "unroll= False\n",
      "Model: \"sequential_12\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "embedding_12 (Embedding)     (None, None, 32)          320000    \n",
      "_________________________________________________________________\n",
      "simple_rnn_12 (SimpleRNN)    (None, 32)                2080      \n",
      "=================================================================\n",
      "Total params: 322,080\n",
      "Trainable params: 322,080\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "from keras.models import Sequential\n",
    "from keras.layers import Embedding, SimpleRNN\n",
    "from keras import regularizers\n",
    "from keras.constraints import max_norm\n",
    "\n",
    "model = Sequential()\n",
    "model.add(Embedding(10000, 32))\n",
    "model.add(SimpleRNN(units=32))\n",
    "model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "---------------下面输出一些东西------------------\n",
      "units= 32\n",
      "activation= tanh\n",
      "use_bias= True\n",
      "kernel_initializer= glorot_uniform\n",
      "recurrent_initializer= orthogonal\n",
      "bias_initializer= zeros\n",
      "kernel_regularizer= None\n",
      "recurrent_regularizer= None\n",
      "bias_regularizer= None\n",
      "activity_regularizer= None\n",
      "kernel_constraint= None\n",
      "recurrent_constraint= None\n",
      "bias_constraint= None\n",
      "dropout= 0.0\n",
      "recurrent_dropout 0.0\n",
      "return_sequences= True\n",
      "return_state= False\n",
      "go_backwards= False\n",
      "stateful= False\n",
      "unroll= False\n",
      "Model: \"sequential_13\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "embedding_13 (Embedding)     (None, None, 32)          320000    \n",
      "_________________________________________________________________\n",
      "simple_rnn_13 (SimpleRNN)    (None, None, 32)          2080      \n",
      "=================================================================\n",
      "Total params: 322,080\n",
      "Trainable params: 322,080\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model = Sequential()\n",
    "model.add(Embedding(10000, 32))\n",
    "model.add(SimpleRNN(32, return_sequences=True))\n",
    "model.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It is sometimes useful to stack several recurrent layers one after the other in order to increase the representational power of a network. \n",
    "In such a setup, you have to get all intermediate layers to return full sequences:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential_3\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "embedding_3 (Embedding)      (None, None, 32)          320000    \n",
      "_________________________________________________________________\n",
      "simple_rnn_3 (SimpleRNN)     (None, None, 32)          2080      \n",
      "_________________________________________________________________\n",
      "simple_rnn_4 (SimpleRNN)     (None, None, 32)          2080      \n",
      "_________________________________________________________________\n",
      "simple_rnn_5 (SimpleRNN)     (None, None, 32)          2080      \n",
      "_________________________________________________________________\n",
      "simple_rnn_6 (SimpleRNN)     (None, 32)                2080      \n",
      "=================================================================\n",
      "Total params: 328,320\n",
      "Trainable params: 328,320\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model = Sequential()\n",
    "model.add(Embedding(10000, 32))\n",
    "model.add(SimpleRNN(32, return_sequences=True))\n",
    "model.add(SimpleRNN(32, return_sequences=True))\n",
    "model.add(SimpleRNN(32, return_sequences=True))\n",
    "model.add(SimpleRNN(32))  # This last layer only returns the last outputs.\n",
    "model.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now let's try to use such a model on the IMDB movie review classification problem. First, let's preprocess the data:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Loading data...\n",
      "25000 train sequences\n",
      "25000 test sequences\n",
      "Pad sequences (samples x time)\n",
      "input_train shape: (25000, 500)\n",
      "input_test shape: (25000, 500)\n"
     ]
    }
   ],
   "source": [
    "from keras.datasets import imdb\n",
    "from keras.preprocessing import sequence\n",
    "\n",
    "max_features = 10000  # number of words to consider as features\n",
    "maxlen = 500  # cut texts after this number of words (among top max_features most common words)\n",
    "batch_size = 32\n",
    "\n",
    "print('Loading data...')\n",
    "(input_train, y_train), (input_test, y_test) = imdb.load_data(num_words=max_features)\n",
    "print(len(input_train), 'train sequences')\n",
    "print(len(input_test), 'test sequences')\n",
    "\n",
    "print('Pad sequences (samples x time)')\n",
    "input_train = sequence.pad_sequences(input_train, maxlen=maxlen)\n",
    "input_test = sequence.pad_sequences(input_test, maxlen=maxlen)\n",
    "print('input_train shape:', input_train.shape)\n",
    "print('input_test shape:', input_test.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's train a simple recurrent network using an `Embedding` layer and a `SimpleRNN` layer:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "---------------下面输出一些东西------------------\n",
      "units= 32\n",
      "activation= tanh\n",
      "use_bias= True\n",
      "kernel_initializer= glorot_uniform\n",
      "recurrent_initializer= orthogonal\n",
      "bias_initializer= zeros\n",
      "kernel_regularizer= None\n",
      "recurrent_regularizer= None\n",
      "bias_regularizer= None\n",
      "activity_regularizer= None\n",
      "kernel_constraint= None\n",
      "recurrent_constraint= None\n",
      "bias_constraint= None\n",
      "dropout= 0.0\n",
      "recurrent_dropout 0.0\n",
      "return_sequences= False\n",
      "return_state= False\n",
      "go_backwards= False\n",
      "stateful= False\n",
      "unroll= False\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/appleyuchi/anaconda3/envs/Python3.6/lib/python3.6/site-packages/tensorflow_core/python/framework/indexed_slices.py:433: UserWarning: Converting sparse IndexedSlices to a dense Tensor of unknown shape. This may consume a large amount of memory.\n",
      "  \"Converting sparse IndexedSlices to a dense Tensor of unknown shape. \"\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 20000 samples, validate on 5000 samples\n",
      "Epoch 1/10\n",
      "20000/20000 [==============================] - 22s 1ms/step - loss: 0.6602 - acc: 0.5954 - val_loss: 0.5036 - val_acc: 0.7784\n",
      "Epoch 2/10\n",
      "20000/20000 [==============================] - 22s 1ms/step - loss: 0.4041 - acc: 0.8291 - val_loss: 0.5112 - val_acc: 0.7312\n",
      "Epoch 3/10\n",
      "20000/20000 [==============================] - 23s 1ms/step - loss: 0.3057 - acc: 0.8783 - val_loss: 0.3957 - val_acc: 0.8290\n",
      "Epoch 4/10\n",
      "20000/20000 [==============================] - 21s 1ms/step - loss: 0.2481 - acc: 0.9039 - val_loss: 0.3677 - val_acc: 0.8576\n",
      "Epoch 5/10\n",
      "20000/20000 [==============================] - 22s 1ms/step - loss: 0.1996 - acc: 0.9229 - val_loss: 0.3870 - val_acc: 0.8434\n",
      "Epoch 6/10\n",
      "20000/20000 [==============================] - 21s 1ms/step - loss: 0.1388 - acc: 0.9503 - val_loss: 0.4067 - val_acc: 0.8666\n",
      "Epoch 7/10\n",
      "20000/20000 [==============================] - 22s 1ms/step - loss: 0.0939 - acc: 0.9693 - val_loss: 0.5133 - val_acc: 0.7974\n",
      "Epoch 8/10\n",
      "20000/20000 [==============================] - 24s 1ms/step - loss: 0.0614 - acc: 0.9815 - val_loss: 0.4754 - val_acc: 0.8536\n",
      "Epoch 9/10\n",
      "20000/20000 [==============================] - 24s 1ms/step - loss: 0.0437 - acc: 0.9865 - val_loss: 0.5764 - val_acc: 0.8142\n",
      "Epoch 10/10\n",
      "20000/20000 [==============================] - 23s 1ms/step - loss: 0.0263 - acc: 0.9928 - val_loss: 0.5727 - val_acc: 0.8374\n"
     ]
    }
   ],
   "source": [
    "from keras.layers import Dense\n",
    "\n",
    "model = Sequential()\n",
    "model.add(Embedding(max_features, 32))\n",
    "model.add(SimpleRNN(32))\n",
    "model.add(Dense(1, activation='sigmoid'))\n",
    "\n",
    "model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['acc'])\n",
    "history = model.fit(input_train, y_train,\n",
    "                    epochs=10,\n",
    "                    batch_size=128,\n",
    "                    validation_split=0.2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's display the training and validation loss and accuracy:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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UfPLY489lnXr1u2wzIQJE4rbg5dl5syZLFq0qPj5tddey5w5c6oSvkQsVXr1k/pLCT3OyJEjmTFjRolpM2bMYOTIkZV6/XPPPUfr1q2rte3SCX3ixIkceeSR1VqXREPNBSVqSuhxhg8fzrPPPlvcL8qyZcv48ssvOeSQQzjnnHPIzs5m33335brrrkv4+i5duvD1118DcOONN9K9e3cOPvjg4i52IbQx33///enduze/+MUv2LhxI3PnzmXWrFlceuml9OnTh88++4zRo0fz9NNPA/Diiy/St29fevXqxZgxY9i8eXPx9q677jr69etHr169+Oijj3aISd3s1p1U6btE6q+UrUO/6CJYsCC56+zTB+68s+z5bdq0YcCAATz//PMMHTqUGTNmcPLJJ2Nm3HjjjbRp04bCwkKOOOII3nvvPfbbb7+E65k3bx4zZsxgwYIFbN26lX79+tG/f38ATjzxRM4++2wArr76ah588EHOP/98TjjhBI4//niGDx9eYl2bNm1i9OjRvPjii3Tv3p3TTz+d++67j4suugiAdu3aMX/+fCZPnsykSZN44IEHSry+ffv2vPDCCzRp0oRPP/2UkSNHkpOTw/PPP88//vEP3nzzTZo2bco334RxwEeNGsXll1/OsGHD2LRpE9u2bavWvq6PUqlXP6mfVEIvJb7aJb665amnnqJfv3707duXhQsXlqgeKe3VV19l2LBhNG3alJYtW3LCCScUz/vggw845JBD6NWrF9OnT2fhwoXlxvPxxx/TtWtXunfvDsAZZ5zBf//73+L5J554IgD9+/cv7tArXkFBAWeffTa9evXipJNOKo67st3sNi3doFnKpOaCErWULaGXV5KuTUOHDmX8+PHMnz+fjRs30r9/f5YuXcqkSZN4++232XXXXRk9enSZ3eZWZPTo0cycOZPevXszdepUXnnllRrFW9QFb1nd78Z3s7tt2zb1hV7Laru/a5HyqIReSvPmzTn88MMZM2ZMcen8u+++o1mzZrRq1YrVq1fz/PPPl7uOQw89lJkzZ5Kfn8/69et55plniuetX7+eDh06UFBQwPS4RsotWrRg/fr1O6xrn332YdmyZSxevBgIvSYedthhlX4/6mZXpP5QQk9g5MiRvPvuu8UJvXfv3vTt25cePXpwyimncNBBB5X7+n79+vHLX/6S3r17c8wxx7D/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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "acc = history.history['acc']\n",
    "val_acc = history.history['val_acc']\n",
    "loss = history.history['loss']\n",
    "val_loss = history.history['val_loss']\n",
    "\n",
    "epochs = range(len(acc))\n",
    "\n",
    "plt.plot(epochs, acc, 'bo', label='Training acc')\n",
    "plt.plot(epochs, val_acc, 'b', label='Validation acc')\n",
    "plt.title('Training and validation accuracy')\n",
    "plt.legend()\n",
    "\n",
    "plt.figure()\n",
    "\n",
    "plt.plot(epochs, loss, 'bo', label='Training loss')\n",
    "plt.plot(epochs, val_loss, 'b', label='Validation loss')\n",
    "plt.title('Training and validation loss')\n",
    "plt.legend()\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As a reminder, in chapter 3, our very first naive approach to this very dataset got us to 88% test accuracy. Unfortunately, our small \n",
    "recurrent network doesn't perform very well at all compared to this baseline (only up to 85% validation accuracy). Part of the problem is \n",
    "that our inputs only consider the first 500 words rather the full sequences -- \n",
    "hence our RNN has access to less information than our earlier baseline model. The remainder of the problem is simply that `SimpleRNN` isn't very good at processing long sequences, like text. Other types of recurrent layers perform much better. Let's take a look at some \n",
    "more advanced layers."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "[...]\n",
    "\n",
    "## A concrete LSTM example in Keras\n",
    "\n",
    "Now let's switch to more practical concerns: we will set up a model using a LSTM layer and train it on the IMDB data. Here's the network, \n",
    "similar to the one with `SimpleRNN` that we just presented. We only specify the output dimensionality of the LSTM layer, and leave every \n",
    "other argument (there are lots) to the Keras defaults. Keras has good defaults, and things will almost always \"just work\" without you \n",
    "having to spend time tuning parameters by hand."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/appleyuchi/anaconda3/envs/Python3.6/lib/python3.6/site-packages/tensorflow_core/python/framework/indexed_slices.py:433: UserWarning: Converting sparse IndexedSlices to a dense Tensor of unknown shape. This may consume a large amount of memory.\n",
      "  \"Converting sparse IndexedSlices to a dense Tensor of unknown shape. \"\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 20000 samples, validate on 5000 samples\n"
     ]
    },
    {
     "ename": "AttributeError",
     "evalue": "'Sequential' object has no attribute '_get_distribution_strategy'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mAttributeError\u001b[0m                            Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-30-de3de929be38>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m     19\u001b[0m                     \u001b[0mbatch_size\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m128\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     20\u001b[0m                     \u001b[0mvalidation_split\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0.2\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 21\u001b[0;31m                    callbacks=[tensorboard])\n\u001b[0m",
      "\u001b[0;32m~/anaconda3/envs/Python3.6/lib/python3.6/site-packages/keras/engine/training.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, max_queue_size, workers, use_multiprocessing, **kwargs)\u001b[0m\n\u001b[1;32m   1237\u001b[0m                                         \u001b[0msteps_per_epoch\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msteps_per_epoch\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1238\u001b[0m                                         \u001b[0mvalidation_steps\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mvalidation_steps\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1239\u001b[0;31m                                         validation_freq=validation_freq)\n\u001b[0m\u001b[1;32m   1240\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1241\u001b[0m     def evaluate(self,\n",
      "\u001b[0;32m~/anaconda3/envs/Python3.6/lib/python3.6/site-packages/keras/engine/training_arrays.py\u001b[0m in \u001b[0;36mfit_loop\u001b[0;34m(model, fit_function, fit_inputs, out_labels, batch_size, epochs, verbose, callbacks, val_function, val_inputs, shuffle, initial_epoch, steps_per_epoch, validation_steps, validation_freq)\u001b[0m\n\u001b[1;32m    117\u001b[0m         \u001b[0mcallback_metrics\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m'val_'\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mn\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mn\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmetrics_names\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    118\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 119\u001b[0;31m     \u001b[0mcallbacks\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_model\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcallback_model\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    120\u001b[0m     callbacks.set_params({\n\u001b[1;32m    121\u001b[0m         \u001b[0;34m'batch_size'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mbatch_size\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/envs/Python3.6/lib/python3.6/site-packages/keras/callbacks/callbacks.py\u001b[0m in \u001b[0;36mset_model\u001b[0;34m(self, model)\u001b[0m\n\u001b[1;32m     66\u001b[0m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmodel\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     67\u001b[0m         \u001b[0;32mfor\u001b[0m \u001b[0mcallback\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcallbacks\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 68\u001b[0;31m             \u001b[0mcallback\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_model\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     69\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     70\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m_call_batch_hook\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmode\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhook\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbatch\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlogs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/envs/Python3.6/lib/python3.6/site-packages/tensorflow_core/python/keras/callbacks.py\u001b[0m in \u001b[0;36mset_model\u001b[0;34m(self, model)\u001b[0m\n\u001b[1;32m   1530\u001b[0m     \u001b[0;31m# possibly distributed settings.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1531\u001b[0m     self._log_write_dir = distributed_file_utils.write_dirpath(\n\u001b[0;32m-> 1532\u001b[0;31m         self.log_dir, self.model._get_distribution_strategy())  # pylint: disable=protected-access\n\u001b[0m\u001b[1;32m   1533\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1534\u001b[0m     \u001b[0;32mwith\u001b[0m \u001b[0mcontext\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0meager_mode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mAttributeError\u001b[0m: 'Sequential' object has no attribute '_get_distribution_strategy'"
     ]
    }
   ],
   "source": [
    "from keras.layers import LSTM,GRU\n",
    "\n",
    "model = Sequential()\n",
    "model.add(Embedding(max_features, 32))\n",
    "model.add(GRU(32))\n",
    "model.add(Dense(1, activation='sigmoid'))\n",
    "\n",
    "model.compile(optimizer='rmsprop',\n",
    "              loss='binary_crossentropy',\n",
    "              metrics=['acc'])\n",
    "history = model.fit(input_train, y_train,\n",
    "                    epochs=10,\n",
    "                    batch_size=128,\n",
    "                    validation_split=0.2z)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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UfPLY489lnXr1u2wzIQJE4rbg5dl5syZLFq0qPj5tddey5w5c6oSvkQsVXr1k/pLCT3OyJEjmTFjRolpM2bMYOTIkZV6/XPPPUfr1q2rte3SCX3ixIkceeSR1VqXREPNBSVqSuhxhg8fzrPPPlvcL8qyZcv48ssvOeSQQzjnnHPIzs5m33335brrrkv4+i5duvD1118DcOONN9K9e3cOPvjg4i52IbQx33///enduze/+MUv2LhxI3PnzmXWrFlceuml9OnTh88++4zRo0fz9NNPA/Diiy/St29fevXqxZgxY9i8eXPx9q677jr69etHr169+Oijj3aISd3s1p1U6btE6q+UrUO/6CJYsCC56+zTB+68s+z5bdq0YcCAATz//PMMHTqUGTNmcPLJJ2Nm3HjjjbRp04bCwkKOOOII3nvvPfbbb7+E65k3bx4zZsxgwYIFbN26lX79+tG/f38ATjzxRM4++2wArr76ah588EHOP/98TjjhBI4//niGDx9eYl2bNm1i9OjRvPjii3Tv3p3TTz+d++67j4suugiAdu3aMX/+fCZPnsykSZN44IEHSry+ffv2vPDCCzRp0oRPP/2UkSNHkpOTw/PPP88//vEP3nzzTZo2bco334RxwEeNGsXll1/OsGHD2LRpE9u2bavWvq6PUqlXP6mfVEIvJb7aJb665amnnqJfv3707duXhQsXlqgeKe3VV19l2LBhNG3alJYtW3LCCScUz/vggw845JBD6NWrF9OnT2fhwoXlxvPxxx/TtWtXunfvDsAZZ5zBf//73+L5J554IgD9+/cv7tArXkFBAWeffTa9evXipJNOKo67st3sNi3doFnKpOaCErWULaGXV5KuTUOHDmX8+PHMnz+fjRs30r9/f5YuXcqkSZN4++232XXXXRk9enSZ3eZWZPTo0cycOZPevXszdepUXnnllRrFW9QFb1nd78Z3s7tt2zb1hV7Laru/a5HyqIReSvPmzTn88MMZM2ZMcen8u+++o1mzZrRq1YrVq1fz/PPPl7uOQw89lJkzZ5Kfn8/69et55plniuetX7+eDh06UFBQwPS4RsotWrRg/fr1O6xrn332YdmyZSxevBgIvSYedthhlX4/6mZXpP5QQk9g5MiRvPvuu8UJvXfv3vTt25cePXpwyimncNBBB5X7+n79+vHLX/6S3r17c8wxx7D/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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "acc = history.history['acc']\n",
    "val_acc = history.history['val_acc']\n",
    "loss = history.history['loss']\n",
    "val_loss = history.history['val_loss']\n",
    "\n",
    "epochs = range(len(acc))\n",
    "\n",
    "plt.plot(epochs, acc, 'bo', label='Training acc')\n",
    "plt.plot(epochs, val_acc, 'b', label='Validation acc')\n",
    "plt.title('Training and validation accuracy')\n",
    "plt.legend()\n",
    "\n",
    "plt.figure()\n",
    "\n",
    "plt.plot(epochs, loss, 'bo', label='Training loss')\n",
    "plt.plot(epochs, val_loss, 'b', label='Validation loss')\n",
    "plt.title('Training and validation loss')\n",
    "plt.legend()\n",
    "\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
